const http = require('http')
const path = require('path')
const fs = require('fs')
const port = 3000

// 网站请求的根 映射到 服务器中的 具体的目录路径
// http /  => 服务器 f:/xx/web
const webRoot = path.resolve('./web')

// mime类型
// const mimes = {
//   jpg: 'image/jpeg',
//   html: 'text/html;charset=utf-8'
// }
const mimes = require('./mime')


const server = http.createServer()
server.on('request', (req, res) => {
  // 对于请求的地址进行默认页面处理
  // let pathname = req.url == '/' ? '/index.html' : req.url
  let pathname = req.url
  // 得到用户请求的地址
  if (pathname == '/favicon.ico') {
    res.end('')
    return;
  }

  // 用户请求的地址转换成在服务器中真实的文件路径  根据请求地址来对应响应  路由s
  let filepath = path.join(webRoot, pathname)

  // 默认多个缺省页的完成
  if (pathname == '/') {
    filepath = path.join(webRoot, 'index.html')
    if (!fs.existsSync(filepath)) {
      filepath = path.join(webRoot, 'default.html')
    }
  }
  // 判断请求文件在服务器中是否真的存在
  if (!fs.existsSync(filepath)) {
    // 请求的文件不存在，返回404
    res.statusCode = 404
    filepath = path.join(webRoot, '404.html')
  }

  // 获取扩展名
  let extname = path.extname(filepath)
  mime = 'text/html;charset=utf-8'
  if (extname) {
    extname = extname.slice(1)
    mime = mimes[extname]
  }


  // mime头类型
  res.setHeader('Content-Type', mime)
  // 流向客户端发送数据
  fs.createReadStream(filepath).pipe(res)
})

server.listen(3000, '0.0.0.0', () => {
  console.log('http://localhost:3000')
})


